package actividades;

import java.io.IOException;
import java.util.StringTokenizer;

import org.json.JSONException;
import org.json.JSONObject;

import tratamientoDatos.CreacionRutaGPX;
import tratamientoDatos.ParseoArchivoRuta;
import world.trainer.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import comunicacionServidor.FuncionesJSON;

public class BuscarRutaActivity extends Activity {

	private ListView listaRutas;
	private String nombreSeleccionado, nombreJson, tipoJson, ficheroJson,
			listaCoincidencias;
	private float distanciaJson;
	private int idJson;
	private EditText nombreBuscado;
	private ProgressDialog dialog;
	private boolean correcto;
	private static String KEY_SUCCESS = "success";

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.buscar_activity);
		listaCoincidencias = "";
		dialog = ProgressDialog.show(this, "", "Cargando...", true);
		dialog.dismiss();
		correcto = true;

		nombreBuscado = (EditText) findViewById(R.id.valNombreRutaABuscar);
		final Button cancelar = (Button) findViewById(R.id.botonCancelarBuscarRuta);
		final Button buscar = (Button) findViewById(R.id.botonBuscarBuscarRuta);

		cancelar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				Intent intent = new Intent(getApplicationContext(),
						MainActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("ACTIVITY", "buscarCancelado");
				intent.putExtras(bundle);
				finish();
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);

			}
		});

		buscar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				if (nombreBuscado.getText().toString().equals("")) {

					Toast toast = Toast.makeText(getApplicationContext(),
							"Debe introducir algun texto en la busqueda",
							Toast.LENGTH_SHORT);
					toast.show();

				} else {
					dialog.show();
					correcto = true;
					new ClaseComunicacion().execute();

				}
			}
		});
	}

	public class ClaseComunicacion extends AsyncTask<Void, Void, Void> {
		FuncionesJSON funcion = new FuncionesJSON();
		JSONObject json = new JSONObject();

		@Override
		protected Void doInBackground(Void... params) {
			try {

				json = funcion.buscarRutas(nombreBuscado.getText().toString());

				listaCoincidencias = json.getString("resultado");
			} catch (Exception e) {
				e.printStackTrace();
				correcto = false;
			}

			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			dialog.dismiss();
			if (correcto) {
				try {
					if (json.getString(KEY_SUCCESS) != null) {
						String res = json.getString(KEY_SUCCESS);
						if (Integer.parseInt(res) == 1) {
							StringTokenizer st = new StringTokenizer(
									listaCoincidencias, " ");
							int j = st.countTokens();
							final String datos[] = new String[j];
							int i = 0;
							while (st.hasMoreTokens()) {
								datos[i] = st.nextToken();
								i++;
							}

							listaRutas = (ListView) findViewById(R.id.listViewListaRutas);
							ArrayAdapter<String> adaptador = new ArrayAdapter<String>(
									getApplicationContext(),
									android.R.layout.simple_list_item_1, datos);

							listaRutas.setAdapter(adaptador);

							listaRutas
									.setOnItemClickListener(new OnItemClickListener() {

										public void onItemClick(
												AdapterView<?> arg0, View arg1,
												int arg2, long arg3) {

											String[] seleccion = datos[arg2]
													.split("\\s+");
											nombreSeleccionado = seleccion[0];
											dialog.show();
											correcto = true;
											new ClaseComunicacion2().execute();

										}

									});
						} else {
							Toast toast = Toast.makeText(
									getApplicationContext(),
									"No se ha podido realizar la busqueda",
									Toast.LENGTH_SHORT);
							toast.show();
						}
					} else {
						Toast toast = Toast.makeText(getApplicationContext(),
								"No se ha podido realizar la busqueda",
								Toast.LENGTH_SHORT);
						toast.show();
					}
				} catch (NumberFormatException e) {
					e.printStackTrace();
					Toast toast = Toast.makeText(getApplicationContext(),
							"No se ha podido realizar la busqueda",
							Toast.LENGTH_SHORT);
					toast.show();
				} catch (JSONException e) {
					e.printStackTrace();
					Toast toast = Toast.makeText(getApplicationContext(),
							"No se ha podido realizar la busqueda",
							Toast.LENGTH_SHORT);
					toast.show();
				}
			} else {
				Toast toast = Toast.makeText(getApplicationContext(),
						"No se ha podido realizar la busqueda",
						Toast.LENGTH_SHORT);
				toast.show();
			}

		}
	}

	private class ClaseComunicacion2 extends AsyncTask<Void, Void, Void> {
		FuncionesJSON funcion = new FuncionesJSON();
		JSONObject json = new JSONObject();

		@Override
		protected Void doInBackground(Void... params) {
			try {

				json = funcion.buscarRuta(nombreSeleccionado);

			} catch (Exception e) {
				e.printStackTrace();
				correcto = false;
			}

			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			dialog.dismiss();
			if (correcto) {
				try {
					if (json.getString(KEY_SUCCESS) != null) {
						String res = json.getString(KEY_SUCCESS);
						if (Integer.parseInt(res) == 1) {
							idJson = Integer.parseInt((String) json
									.getJSONObject("ruta").get("id"));
							distanciaJson = Float.parseFloat((String) json
									.getJSONObject("ruta").get("distancia"));
							nombreJson = (String) json.getJSONObject("ruta")
									.get("nombre");
							tipoJson = (String) json.getJSONObject("ruta").get(
									"tipo");
							ficheroJson = (String) json.getJSONObject("ruta")
									.get("fichero");
							// Creacion fichero en sd
							try {
								new CreacionRutaGPX(ficheroJson, nombreJson);
							} catch (IOException e) {
								e.printStackTrace();
								Toast toast = Toast.makeText(
										getApplicationContext(),
										"No se ha podido cargar la ruta",
										Toast.LENGTH_SHORT);
								toast.show();
							}
							// Datos del fichero ruta

							ParseoArchivoRuta rutaParseo = new ParseoArchivoRuta(
									getApplicationContext(), nombreJson);

							Intent intent = new Intent(getApplicationContext(),
									MainActivity.class);

							Bundle bundle = new Bundle();
							bundle.putString("ACTIVITY", "CargarActivity");
							bundle.putDouble("VELOCIDADMEDIA", 0.0);
							bundle.putDouble("VELOCIDADMAXIMA", 0.0);
							bundle.putDouble("DISTANCIA", distanciaJson);
							bundle.putDouble("DURACION", 0.0);
							bundle.putDouble("CALORIAS", 0.0);
							bundle.putInt("ID", idJson);
							bundle.putString("NOMBRERUTACARGADA", nombreJson);
							if (tipoJson.equals("Pie"))
								bundle.putInt("TIPO", 0);
							else
								bundle.putInt("TIPO", 1);

							bundle.putParcelable("RUTA", rutaParseo.getRuta());

							intent.putExtras(bundle);
							finish();
							intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
							startActivity(intent);
						}
					}
				} catch (NumberFormatException e) {
					e.printStackTrace();
					Toast toast = Toast.makeText(getApplicationContext(),
							"No se ha podido cargar la ruta",
							Toast.LENGTH_SHORT);
					toast.show();
				} catch (JSONException e) {
					e.printStackTrace();
					Toast toast = Toast.makeText(getApplicationContext(),
							"No se ha podido cargar la ruta",
							Toast.LENGTH_SHORT);
					toast.show();
				}
			} else {
				Toast toast = Toast.makeText(getApplicationContext(),
						"No se ha podido cargar la ruta", Toast.LENGTH_SHORT);
				toast.show();
			}
		}
	}

	public void onBackPressed() {

		finish();
		Intent intent = new Intent(getApplicationContext(), MainActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("ACTIVITY", "buscarCancelado");
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		startActivity(intent);
	}

	public void onPause() {

		finish();
		super.onPause();
	}
}
